gdk/wayland: Clear modifiers when we lose keyboard focus
authorJan Alexander Steffens (heftig) <jan.steffens@gmail.com>
Thu, 2 Apr 2020 17:31:22 +0000 (19:31 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 2 Apr 2020 20:18:18 +0000 (16:18 -0400)
When we `Alt+Tab` away from a GTK application, it loses keyboard focus.
If we don't clear the modifiers, events from other devices that we
receive while unfocused will assume `Alt` is still pressed. This results
in e.g. Firefox navigating through the history instead of scrolling the
page when using the mouse wheel on it.

We don't get any information about modifiers while we are missing
keyboard focus, so assuming no modifiers are active is the best we can
do.

The shell sends us a modifier update immediately before we regain
keyboard focus, so the state shouldn't get out of sync.

Fixes https://gitlab.gnome.org/GNOME/gtk/-/issues/2112

gdk/wayland/gdkdevice-wayland.c

index 0c850147f491065f951d385c099c4766daa19f4e..0e1ac1d2838203f16eed220a32df897b4640ee02 100644 (file)
@@ -1934,6 +1934,7 @@ keyboard_handle_leave (void               *data,
   g_object_unref (seat->keyboard_focus);
   seat->keyboard_focus = NULL;
   seat->repeat_key = 0;
+  seat->key_modifiers = 0;
 
   GDK_SEAT_NOTE (seat, EVENTS,
             g_message ("focus out, seat %p surface %p",